package com.jz.netthings.analysis.mapper;

import com.jz.netthings.analysis.bean.ProviderInfoDzjwd;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.jz.netthings.analysis.bean.RegisterGtt;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author yangyunyun
 * @since 2019-07-10
 */
public interface ProviderInfoDzjwdMapper extends BaseMapper<ProviderInfoDzjwd> {


    /**
     * 查询所有地址，去重
     * @return
     */
    @Select("SELECT DISTINCT splitAddress FROM provider_info_dzjwd ORDER BY splitAddress DESC")
    List<String> selectAllAddressDistinct();

    /**
     *
     * 查询某个村某个时间段进站人数
     * @param villageName 村落名称
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int selectCurrentTimePNum(@Param("villageName") String villageName, @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    /**
     *
     * 查询某个村某个时间段进站人数的所有献浆量（袋）
     * @param villageName 村落名称
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int selectCurrentTimeCollNum(@Param("villageName") String villageName,@Param("beginTime") String beginTime,@Param("endTime") String endTime);

    /**
     *
     * 查询某个村某个时间段新增的浆员人数
     * @param villageName 村落名称
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int selectCurrentTimeAddPNum(@Param("villageName") String villageName,@Param("beginTime") String beginTime,@Param("endTime") String endTime);

    /**
     *
     * 查询某个村某个时间段新增的浆员在那个时间段的献浆总量
     * @param villageName 村落名称
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int selectCurrentTimeAddCollNum(@Param("villageName") String villageName,@Param("beginTime") String beginTime,@Param("endTime") String endTime);

    /**
     * 查询某个村某段时间来了，另外某段时间又没来的总人数： 当期或者同期的复苏献浆员总人数
     * @param villageName 村落名称
     * @param beginTime1 某段时间没来的起始时间
     * @param endTime1 某段时间没来的结束时间
     * @param beginTime2 某段时间来了的开始时间
     * @param endTime2 某段时间来了的结束时间
     * @return
     */
    int selectCurrentTimeFuSuPNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );

    /**
     * 查询某个村某段时间来了，另外某段时间又没来的总人数 的 献浆总量： 当期或者同期的复苏献浆员 的献浆总量
     * @param villageName 村落名称
     * @param beginTime1 某段时间没来的起始时间
     * @param endTime1 某段时间没来的结束时间
     * @param beginTime2 某段时间来了的开始时间
     * @param endTime2 某段时间来了的结束时间
     * @return
     */
    int selectCurrentTimeFuSuCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );

    /**
     *
     * 查询某个村某段时间来了，另外某段时间也来了的总人数： 当期或者同期的忠诚浆员
     * @param villageName 村落名称
     * @param beginTime1 某段时间没来的起始时间
     * @param endTime1 某段时间没来的结束时间
     * @param beginTime2 某段时间来了的开始时间
     * @param endTime2 某段时间来了的结束时间
     * @return
     */
    int selectCurrentTimeZCPNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );

    /**
     *
     * 查询某个村某段时间来了，另外某段时间也来了的人的总献浆量： 当期或者同期的忠诚浆员总献浆量
     * @param villageName 村落名称
     * @param beginTime1 某段时间没来的起始时间
     * @param endTime1 某段时间没来的结束时间
     * @param beginTime2 某段时间来了的开始时间
     * @param endTime2 某段时间来了的结束时间
     * @return
     */
    int selectCurrentTimeZCCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );
    /**
     *
     * 查询某个村某段时间来了，另外某段时间也来了的人在某一段时间的总浆量
     * @param villageName 村落名称
     * @param beginTime1 某段时间没来的起始时间
     * @param endTime1 某段时间没来的结束时间
     * @param beginTime2 某段时间来了的开始时间
     * @param endTime2 某段时间来了的结束时间
     * @param beginTime3 统计某一段时间总浆量的开始时间
     * @param endTime3 统计某一段时间总浆量的结束时间
     * @return
     */
    int selectTimeZCCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2,@Param("beginTime3") String beginTime3,@Param("endTime3") String endTime3 );

    /**
     *
     * 查询某个村某个时间段内未进站的总人数
     * @param villageName 村落名称
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int selectCurrentTimeNotComedPNum(@Param("villageName") String villageName,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
    /**
     *
     * 查询某个村某段时间没来的人，另外某段时间的总献浆量： 当期未进站总人数去年献浆总量袋
     * @param villageName 村落名称
     * @param beginTime1 总献浆量某段时间的起始时间
     * @param endTime1 总献浆量某段时间的结束时间
     * @param beginTime2 某段时间没来的开始时间
     * @param endTime2 某段时间没来的结束时间
     * @return
     */
    int selectCurrentTimeNotComedPLastYearCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );

    /**
     *
     * 查询某个村某段时间来了，某段时间又没来的人数： 休眠浆员总人数，和复苏浆员反着的
     * @param villageName 村落名称
     * @param beginTime1 总献浆量某段时间的起始时间
     * @param endTime1 总献浆量某段时间的结束时间
     * @param beginTime2 某段时间没来的开始时间
     * @param endTime2 某段时间没来的结束时间
     * @return
     */
    int selectXiuMianPNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );
    /**
     *
     * 查询某个村某段时间来了，某段时间又没来的人，在来了的那段时间内的献浆总量： 休眠浆员去年献浆总量/袋
     * @param villageName 村落名称
     * @param beginTime1 总献浆量某段时间的起始时间
     * @param endTime1 总献浆量某段时间的结束时间
     * @param beginTime2 某段时间没来的开始时间
     * @param endTime2 某段时间没来的结束时间
     * @return
     */
    int selectLastYearXiuMianCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );

    /**
     *
     * 查询某个村某段时间来了，某段时间又没来的人，在另外一段时间内的献浆总量： 休眠浆员去年同期的献浆总量/袋
     *
     * 即使去年同期过后来了的浆员，在去年同期中也没有献浆量
     * 所以，统计休眠浆员去年同期的献浆总量，就可以直接统计今年没来，去年同期来了的浆员的献浆量
     * 所以，就可以使用上面那个查询方法
     *
     * @param villageName 村落名称
     * @param beginTime1 总献浆量某段时间的起始时间
     * @param endTime1 总献浆量某段时间的结束时间
     * @param beginTime2 某段时间没来的开始时间
     * @param endTime2 某段时间没来的结束时间
     * @param beginTime3 另一段时间开始时间
     * @param endTime3 另一段时间的结束时间
     * @return
     */
//    int selectLastTimeXiuMianCollNum(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2,@Param("beginTime2") String beginTime3,@Param("endTime2") String endTime3 );


    /**
     * 查询指定时间段内登记的浆员的所有标准地址集合
     * @param beginTime
     * @param endTime
     * @return
     */
    List<String> selectRegVillList(@Param("beginTime") String beginTime,@Param("endTime") String endTime);


    /**
     * 查询指定时间段内某个村落登记的浆员基本甘特图部分信息
     * @param villageName
     * @param beginTime
     * @param endTime
     * @param isNew 是否新浆员，如果为 1 ，则只查询新浆员，否则查询所有
     * @return
     */
    List<RegisterGtt> selectRegGttList(@Param("villageName") String villageName, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("isNew") String isNew);


    /**
     *
     * 查询某个村某段时间来了，某段时间又没来的浆员ID集合： 休眠浆员总人数，和复苏浆员反着的
     * @param villageName 村落名称
     * @param beginTime1 总献浆量某段时间的起始时间
     * @param endTime1 总献浆量某段时间的结束时间
     * @param beginTime2 某段时间没来的开始时间
     * @param endTime2 某段时间没来的结束时间
     * @return
     */
    List<Long> selectXiuMianProviderNo(@Param("villageName") String villageName,@Param("beginTime1") String beginTime1,@Param("endTime1") String endTime1,@Param("beginTime2") String beginTime2,@Param("endTime2") String endTime2 );


    /**
     *
     * 查询某个村落的管理护士总人数、义工总人数、义工管理浆员总人数
     * @param villageName 村落名称
     * @return
     */
    List<Map<String,Long>> selectLinkNurseYgCount(@Param("villageName") String villageName);


    /**
     * 查询某个村落某段时间内的已进站但未被链接的浆员
     * @param villageName 村落名称
     * @param beginTime 进站的开始时间
     * @param endTime 进站的结束时间
     * @return
     */
    List<Long> selectComedNotLink(@Param("villageName") String villageName, @Param("beginTime") String beginTime, @Param("endTime") String endTime);






}
